package com.bicon.botu.core.base.validate;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 校验帮助类
 *
 * @version 1.0.0
 * @author: zhangx
 * @date 2018/3/5 17:10
 * @description
 **/
public class ValidateUtils implements Serializable {

    /**
     * 手机格式正则
     */
    public static final String PHONE = "^(1[3-9])\\d{9}$";

    /**
     * 邮箱格式正则
     */
    public static final String EMIL = "\\w+(\\.\\w)*@\\w+(\\.\\w{2,3}){1,3}";

    /**
     * 用户名格式正则
     */
    public static final String USERNAME = "[\\w\\d]{8,16}";

    /**
     * 用户名密码正则
     */
    public static final String USERPASSWORD = "[~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~\\w\\d]{6,16}";

    /**
     * 判断是否为电话号码格式
     *
     * @param str 待检测字符串
     * @return boolean 是：true;
     */
    public static boolean isPhone(String str) {
        final int size = 11;
        if (StringUtils.isBlank(str) || str.trim().length() != size) {
            return false;
        }
        return regular(str, PHONE);
    }

    /**
     * 判断电话号码是否正确
     *
     * @param phoneNumbers 电话号码集合
     * @return
     */
    public static boolean isPhone(List<String> phoneNumbers) {
        if (CollectionUtils.isEmpty(phoneNumbers)) {
            return false;
        }

        for (String phoneNumber : phoneNumbers) {
            if (!isPhone(phoneNumber)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断账号是否符合邮箱格式
     *
     * @param str 待检测字符串
     * @return boolean 是：true;
     */
    public static boolean isEmil(String str) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        return regular(str, EMIL);
    }

    /**
     * 判断账号是否符合用户名格式
     *
     * @param str 待检测字符串
     * @return boolean 是：true;
     */
    public static boolean isUserName(String str) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        return regular(str, USERNAME);
    }

    /**
     * 判断账号是否符合用户名格式
     *
     * @param str 待检测字符串
     * @return boolean 是：true;
     */
    public static boolean isPassWord(String str) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        return regular(str, USERPASSWORD);
    }


    /**
     * 匹配是否符合正则表达式
     *
     * @param str     匹配的字符串
     * @param pattern 匹配模式
     * @return boolean 是：true;
     */
    public static boolean regular(String str, String pattern) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(str);
        return m.matches();
    }

}
